library(pROC)
acc_f = function(cfm) {
(cfm['Yes', 'Yes'] + cfm['No', 'No']) / sum(cfm)
}
fpr_f = function(cfm) {
cfm['Yes', 'No'] / sum(cfm[, 'No'])
}
fnr_f = function(cfm) {
cfm['No', 'Yes'] / sum(cfm[, 'Yes'])
}
auc_f = function(pred) {
y = pred$y
pred_prob = pred$prob
roc_object <- roc(y, pred_prob)
auc_c = auc(roc_object)[1]
return(auc_c)
}
logit_pred_prob <- predict(logit_mod, Default, type = "response")
lda_pred_prob <- lda_pred$posterior[, 2]
qda_pred_prob <- qda_pred$posterior[, 2]
nb_pred_prob <- predict(nb_mod, Default, type = "raw")[, 2]
knn_mod <- knn(
train = X_default,
test = X_default,
cl = Default$default,
prob = TRUE,
k = 5
)
knn_pred_prob <- 1 - attr(knn_mod, "prob")
row_names = c("Null", "Logit", "LDA", "QDA", "NB", "KNN")
acc_v = sapply(list(logit_cfm, lda_cfm, qda_cfm, nb_cfm, knn_cfm), acc_f)
fpr_v = sapply(list(logit_cfm, lda_cfm, qda_cfm, nb_cfm, knn_cfm), fpr_f)
fnr_v = sapply(list(logit_cfm, lda_cfm, qda_cfm, nb_cfm, knn_cfm), fnr_f)
auc_v = sapply(list(data.frame(y = Default$default,
prob = logit_pred_prob),
data.frame(y = Default$default,
prob = lda_pred_prob),
data.frame(y = Default$default,
prob = qda_pred_prob),
data.frame(y = Default$default,
prob = nb_pred_prob),
data.frame(y = Default$default,
prob = knn_pred_prob)),
auc_f)
cfm_null = matrix(c(9667, 333, 0, 0), nrow = 2, ncol = 2, byrow = TRUE)
row.names(cfm_null) <- c("No", "Yes")
colnames(cfm_null) <- c("No", "Yes")
tibble(Classifier = row_names,
ACC = c(acc_f(cfm_null), acc_v),
FPR = c(fpr_f(cfm_null), fpr_v),
FNR = c(fnr_f(cfm_null), fnr_v),
AUC = c(0.5, auc_v))